iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
自我挑戰組

從免費網路資源中入門java系列 第 28

【Day28】Java 例外處理:如何處理錯誤和異常情況

  • 分享至 

  • xImage
  •  

在程式開發中,錯誤和異常情況是不可避免的。為了讓程式能夠在出現問題時有另外的處理機制並避免直接崩潰,Java 提供了例外處理機制(Exception Handling)。這個機制允許開發者在程式運行時捕捉並處理異常情況,從而提高程式的穩定性和可維護性。

Java 中的例外分為兩類:

1.檢查例外(Checked Exception):在編譯時期必須處理的例外,例如 IOException
2.非檢查例外(Unchecked Exception):主要是 RuntimeException 類及其子類,這類例外通常是程式設計錯誤,例如 NullPointerExceptionArrayIndexOutOfBoundsException

例外處理的語法
在 Java 中,使用 try-catch-finally 結構來處理例外。

  1. try {}
    用來包裹可能會拋出例外的程式碼。如果在 try 區塊中發生了例外,程式會跳轉到對應的 catch 區塊進行處理。

  2. catch {}
    catch 用來捕捉和處理拋出的例外。每個 catch 區塊可以處理一種特定類型的例外。

  3. finally {}
    finally 區塊中的程式碼無論是否發生例外都會被執行。通常用來釋放資源,例如關閉文件、資料庫連接等。

例外處理範例

import java.io.*;

public class ExceptionHandlingExample {

    public static void main(String[] args) {
        FileReader file = null;

        try {
            // 可能會拋出 FileNotFoundException
            file = new FileReader("non_existent_file.txt");
            BufferedReader reader = new BufferedReader(file);
            
            // 讀取文件內容
            System.out.println(reader.readLine());

        } catch (FileNotFoundException e) {
            // 處理文件未找到的例外
            System.out.println("文件未找到:" + e.getMessage());

        } catch (IOException e) {
            // 處理文件讀取過程中的例外
            System.out.println("讀取文件時發生錯誤:" + e.getMessage());

        } finally {
            // 無論是否發生例外,finally{}內的程式碼都會執行
            try {
                if (file != null) {
                    file.close();
                }
            } catch (IOException e) {
                System.out.println("關閉文件時發生錯誤:" + e.getMessage());
            }
        }
    }
}

使用 throw 關鍵字

在方法宣告中使用 throw 關鍵字來表示該方法可能拋出的檢查例外。當方法拋出例外但不進行處理時,可以將處理責任傳遞給調用該方法的地方。

throw用途

  • 拋出例外:throw 用來在程式執行中手動生成並拋出例外物件,這樣程式可以中斷正常的流程並轉移到例外處理機制。
  • 自訂例外:可以用 throw 來拋出自訂的例外類別,讓程式更加靈活地處理具體的錯誤。
  • 中斷程式的正常流程:當某個方法遇到無法繼續執行的情況,throw 允許拋出例外來中斷這個方法,並將控制權交給 try-catch 區塊進行處理,或者讓上層調用者處理。
public static void readFile() throws IOException {
    FileReader file = new FileReader("somefile.txt");
    BufferedReader reader = new BufferedReader(file);
    System.out.println(reader.readLine());
    file.close();
}

throws IOException表示 readFile() 方法可能會拋出 IOException,這是一種檢查例外。通常發生在檔案操作時,例如當檔案不存在或無法讀取時。呼叫這個方法的程式碼必須處理這個例外,使用 try-catch 或方法中聲明 throws IOException。

如果上述範例的方法readFile()被調用,你可以用 try-catch 區塊來捕捉和處理 IOException,如下:

public static void main(String[] args) {
    try {
        readFile();
    } catch (IOException e) {
        System.out.println("檔案讀取錯誤: " + e.getMessage());
    }
}

上一篇
【Day27】Java - 泛型(generic)
下一篇
【Day29】Java - enum 列舉
系列文
從免費網路資源中入門java30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言